/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logic;

import bo.DisciplinaBO;
import entidades.Disciplina;
import entidades.Questao;
import entidades.TipoQuestao;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.util.ArrayList;
import java.util.List;
import javax.xml.transform.*;  
import javax.xml.transform.stream.*;  
import java.io.*; 
import javax.swing.DefaultListModel;

/**
 *
 * @author Luan
 */
public class XMLer {
        
    private static List<Questao> questoesDaProva = new ArrayList<Questao>();
    private static String nomeProva = null;

    public static List<Disciplina> lerDados() throws IOException{
        try{
            File inputFile = new File("Dados.xml");
            List<Disciplina> disciplina = new ArrayList<Disciplina>();
            if(inputFile.exists()){
                XMLDecoder xmlDecoder = null;
                try{
                    xmlDecoder = new XMLDecoder(new FileInputStream(inputFile));
                    disciplina = (List<Disciplina>) xmlDecoder.readObject();
                } finally{
                    if(xmlDecoder != null)
                        xmlDecoder.close();
                }
            }
            return disciplina;
        } catch(IOException e){
            throw e;
        }
    }
    
    public static void escreverDados(List<Disciplina> disciplina) throws IOException, Exception{
        try{
            XMLEncoder xmlEncoder = null;
            try{
                xmlEncoder = new XMLEncoder(new FileOutputStream("Dados.xml"));
                xmlEncoder.writeObject(disciplina);
            } finally{
                if(xmlEncoder != null)
                    xmlEncoder.close();
            }
        } catch(IOException e){            
        }
    }

    public static void escreverDadosQuestoes(String nomeArquivo, List<Questao> questoesProva, DefaultListModel listModelPontuacao) throws IOException{
        nomeProva = nomeArquivo;
        questoesDaProva = questoesProva;
        FileOutputStream prova;
        PrintStream fileSaida;  
        int i = 0, j = 1;
        try{
            prova = new FileOutputStream(nomeProva+".html");  
            fileSaida = new PrintStream(prova);
            for(Questao questao : questoesProva){
                if(questao.getTipoQuestao().compareTo(TipoQuestao.MULTIPLA_ESCOLHA) == 0){
                    fileSaida.print("<p>"+j+") "+questao.getEnunciadoQuestao()+" - Pontua&ccedil;&atilde;o: "+listModelPontuacao.get(i) +"</p>");
                    fileSaida.print("a) "+questao.getOpcoes().get(0)+"<br />");
                    fileSaida.print("b) "+questao.getOpcoes().get(1)+"<br />");
                    fileSaida.print("c) "+questao.getOpcoes().get(2)+"<br />");
                    fileSaida.print("d) "+questao.getOpcoes().get(3)+"<br />");
                    fileSaida.print("e) "+questao.getOpcoes().get(4)+"<br /><br />");
                }
                else{
                    fileSaida.print("<p>"+j+") "+questao.getEnunciadoQuestao()+" - Pontua&ccedil;&atilde;o: "+listModelPontuacao.get(i) +"</p>");
                    fileSaida.print("Resposta:<br /><br />");
                }                       
                i++; j++;
            }
        }catch(Exception e) {
            System.err.println(e);  
        }
    }

    public static void ProcessaGabarito(String nomeArquivo, List<Questao> questoesProva, DefaultListModel listModelPontuacao) {
        questoesDaProva = questoesProva;
        FileOutputStream prova;
        PrintStream fileSaida;  
        int i = 0, j = 1;
        try{  
            prova = new FileOutputStream(nomeProva+"Gabarito.html");  
            fileSaida = new PrintStream(prova);
            fileSaida.print("GABARITO");
            for(Questao questao : questoesProva){
                if(questao.getTipoQuestao().compareTo(TipoQuestao.MULTIPLA_ESCOLHA) == 0){
                    fileSaida.print("<p>"+j+") "+questao.getEnunciadoQuestao()+"</p>");
                    int k = questao.getOpcaoCorreta();
                    if (k == 0) fileSaida.print(questao.getOpcoes().get(0)+"<br />");
                    else if (k == 1) fileSaida.print(questao.getOpcoes().get(1)+"<br />");
                    else if (k == 2) fileSaida.print(questao.getOpcoes().get(2)+"<br />");
                    else if (k == 3) fileSaida.print(questao.getOpcoes().get(3)+"<br />");
                    else fileSaida.print(questao.getOpcoes().get(4)+"<br /><br />");
                }
                else{
                    fileSaida.print("<p>"+j+") "+questao.getEnunciadoQuestao()+"</p>");
                    fileSaida.print("Resposta: "+questao.getResposta()+"<br /><br />");
                }                       
                i++; j++;
            }
        }catch(Exception e) {  
            System.err.println(e);  
        }
    }
}
